/**
 * 获取字符的长度，full为true时，一个汉字算两个长度
 * @param {String} str 
 * @param {Boolean} full 
 */

function getTextLength (str, full) {
  let len = 0;
  for (let i = 0; i < str.length; i++) {
      let c = str.charCodeAt(i);
      //单字节加1 
      if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) {
          len++;
      }
      else {
          len += (full ? 2 : 1);
      }
  }
  return len;
}

/**
* rgba(255, 255, 255, 1) => #ffffff
* @param {String} color 
*/
function transferColor (color = '') {
  let res = '#';
  color = color.replace(/^rgba?\(/, '').replace(/\)$/, '');
  color = color.split(', ');
  
  color.length > 3 ? color.length = 3 : '';
  for(let item of color) {
      item = parseInt(item || 0);
      if(item < 10) {
          res += ('0' + item)
      }else {
          res += (item.toString(16))
      }
  }

  return res;
}

function transferBorder (border = '') {
  let res = border.match(/(\w+)px\s(\w+)\s(.*)/);
  let obj = {};

  if(res) {
       obj = {
          width: +res[1],
          style: res[2],
          color: res[3]
      }
  }
  
  return res ? obj : null;
}


/**
* 内边距，依次为上右下左
* @param {*} padding 
*/
function transferPadding (padding = '0 0 0 0') {
  padding = padding.split(' ');
  for(let i = 0, len = padding.length; i < len; i++) {
      padding[i] = +padding[i].replace('px', '');
  }

  return padding;
}
/**
* type1: 0, 25, 17, rgba(0, 0, 0, 0.3)
* type2: rgba(0, 0, 0, 0.3) 0px 25px 17px 0px => (0, 25, 17, rgba(0, 0, 0, 0.3))
* @param {*} shadow 
*/
function transferBoxShadow(shadow = '', type) {
  if(!shadow || shadow === 'none') return;
  let color;
  let split;

  split = shadow.match(/(\w+)\s(\w+)\s(\w+)\s(rgb.*)/);

  if (split) {
      split.shift();
      shadow = split;
      color = split[3] || '#ffffff';
  } else {
      split = shadow.split(') ');
      color = split[0] + ')'
      shadow = split[1].split('px ');
  }

  return {
      offsetX: +shadow[0] || 0,
      offsetY: +shadow[1] || 0,
      blur: +shadow[2] || 0,
      color
  }
}

function getUid(prefix) {
  prefix = prefix || '';

  return (
      prefix +
      'xxyxxyxx'.replace(/[xy]/g, c => {
          let r = (Math.random() * 16) | 0;
          let v = c === 'x' ? r : (r & 0x3) | 0x8;
          return v.toString(16);
      })
  );
}

export default {
  getTextLength,
  transferBorder,
  transferColor,
  transferPadding,
  transferBoxShadow,
  getUid
}